package com.bajiao.app;

import cn.hutool.json.JSONUtil;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CountPrice {

        public static void main(String[] args) {
            BigDecimal a = new BigDecimal("30");
            BigDecimal b = new BigDecimal("30");
            BigDecimal c = new BigDecimal("20");
            BigDecimal d = new BigDecimal("20");
            BigDecimal e = new BigDecimal("20");
            // 5张满100减X的优惠券
            BigDecimal[] couponDiscounts = {a, b, c, d, e}; // 每张优惠券的减额

            // 订单金额
            double orderAmount = 246;

            // 记录使用的优惠券数量和总优惠金额
            int totalCouponCount = 0;
            BigDecimal totalDiscount = new BigDecimal(0);

            // 当前使用的优惠券索引
            int couponIndex = 0;
            List<String> couponIds = new ArrayList<String>();
            Map<BigDecimal, Integer> map = new HashMap();
            int q = 1;
            // 每500元一个循环
            while (orderAmount >= 100) {
                // 计算当前循环的满减次数
                int fullCycles = (int) (orderAmount / 500); // 完整500元循环次数
                // 在完整500元循环内使用优惠券
                for (int i = 0; i <= fullCycles; i++) {
                    for (int j = 0; j < 5; j++) {
                        if (orderAmount >= 100) {
                            totalCouponCount++;
                            totalDiscount = totalDiscount.add(couponDiscounts[couponIndex]);
                            orderAmount -= 100; // 每满100元使用一张优惠券
                            BigDecimal s = couponDiscounts[couponIndex];
                            if(map.containsKey(s)){
                                map.put(s, map.get(s)+1);
                            }else{
                                map.put(s, 1);
                            }
                            couponIndex = (couponIndex + 1) % 5; // 循环使用优惠券
                        } else {
                            break;
                        }
                    }
                }

                // 处理剩余金额
                while (orderAmount >= 100) {
                    totalCouponCount++;
                    totalDiscount = totalDiscount.add(couponDiscounts[couponIndex]);
                    orderAmount -= 100; // 每满100元使用一张优惠券
                    couponIndex = (couponIndex + 1) % 5; // 循环使用优惠券
                }

                break; // 退出循环
            }

            // 输出结果
            System.out.println("使用的优惠券数量: " + totalCouponCount);
            System.out.println("总优惠金额: " + totalDiscount);
            System.out.println("剩余订单金额: " + orderAmount);
            System.out.println("11111: " + JSONUtil.parse(couponIds));
            System.out.println("22222: " + JSONUtil.parse(map));

        }

}
